<!doctype html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes">
<style>
body {
  font-family: Helvetica, arial, sans-serif;
  font-size: 14px;
  line-height: 1.6;
  padding-top: 10px;
  padding-bottom: 10px;
  background-color: white;
  padding: 30px; }

body > *:first-child {
  margin-top: 0 !important; }
body > *:last-child {
  margin-bottom: 0 !important; }

a {
  color: #4183C4; }
a.absent {
  color: #cc0000; }
a.anchor {
  display: block;
  padding-left: 30px;
  margin-left: -30px;
  cursor: pointer;
  position: absolute;
  top: 0;
  left: 0;
  bottom: 0; }

h1, h2, h3, h4, h5, h6 {
  margin: 20px 0 10px;
  padding: 0;
  font-weight: bold;
  -webkit-font-smoothing: antialiased;
  cursor: text;
  position: relative; }

h1:hover a.anchor, h2:hover a.anchor, h3:hover a.anchor, h4:hover a.anchor, h5:hover a.anchor, h6:hover a.anchor {
  background: url() no-repeat 10px center;
  text-decoration: none; }

h1 tt, h1 code {
  font-size: inherit; }

h2 tt, h2 code {
  font-size: inherit; }

h3 tt, h3 code {
  font-size: inherit; }

h4 tt, h4 code {
  font-size: inherit; }

h5 tt, h5 code {
  font-size: inherit; }

h6 tt, h6 code {
  font-size: inherit; }

h1 {
  font-size: 28px;
  color: black; }

h2 {
  font-size: 24px;
  border-bottom: 1px solid #cccccc;
  color: black; }

h3 {
  font-size: 18px; }

h4 {
  font-size: 16px; }

h5 {
  font-size: 14px; }

h6 {
  color: #777777;
  font-size: 14px; }

p, blockquote, ul, ol, dl, li, table, pre {
  margin: 15px 0; }

hr {
  background: transparent url() repeat-x 0 0;
  border: 0 none;
  color: #cccccc;
  height: 4px;
  padding: 0;
}

body > h2:first-child {
  margin-top: 0;
  padding-top: 0; }
body > h1:first-child {
  margin-top: 0;
  padding-top: 0; }
  body > h1:first-child + h2 {
    margin-top: 0;
    padding-top: 0; }
body > h3:first-child, body > h4:first-child, body > h5:first-child, body > h6:first-child {
  margin-top: 0;
  padding-top: 0; }

a:first-child h1, a:first-child h2, a:first-child h3, a:first-child h4, a:first-child h5, a:first-child h6 {
  margin-top: 0;
  padding-top: 0; }

h1 p, h2 p, h3 p, h4 p, h5 p, h6 p {
  margin-top: 0; }

li p.first {
  display: inline-block; }
li {
  margin: 0; }
ul, ol {
  padding-left: 30px; }

ul :first-child, ol :first-child {
  margin-top: 0; }

dl {
  padding: 0; }
  dl dt {
    font-size: 14px;
    font-weight: bold;
    font-style: italic;
    padding: 0;
    margin: 15px 0 5px; }
    dl dt:first-child {
      padding: 0; }
    dl dt > :first-child {
      margin-top: 0; }
    dl dt > :last-child {
      margin-bottom: 0; }
  dl dd {
    margin: 0 0 15px;
    padding: 0 15px; }
    dl dd > :first-child {
      margin-top: 0; }
    dl dd > :last-child {
      margin-bottom: 0; }

blockquote {
  border-left: 4px solid #dddddd;
  padding: 0 15px;
  color: #777777; }
  blockquote > :first-child {
    margin-top: 0; }
  blockquote > :last-child {
    margin-bottom: 0; }

table {
  padding: 0;border-collapse: collapse; }
  table tr {
    border-top: 1px solid #cccccc;
    background-color: white;
    margin: 0;
    padding: 0; }
    table tr:nth-child(2n) {
      background-color: #f8f8f8; }
    table tr th {
      font-weight: bold;
      border: 1px solid #cccccc;
      margin: 0;
      padding: 6px 13px; }
    table tr td {
      border: 1px solid #cccccc;
      margin: 0;
      padding: 6px 13px; }
    table tr th :first-child, table tr td :first-child {
      margin-top: 0; }
    table tr th :last-child, table tr td :last-child {
      margin-bottom: 0; }

img {
  max-width: 100%; }

span.frame {
  display: block;
  overflow: hidden; }
  span.frame > span {
    border: 1px solid #dddddd;
    display: block;
    float: left;
    overflow: hidden;
    margin: 13px 0 0;
    padding: 7px;
    width: auto; }
  span.frame span img {
    display: block;
    float: left; }
  span.frame span span {
    clear: both;
    color: #333333;
    display: block;
    padding: 5px 0 0; }
span.align-center {
  display: block;
  overflow: hidden;
  clear: both; }
  span.align-center > span {
    display: block;
    overflow: hidden;
    margin: 13px auto 0;
    text-align: center; }
  span.align-center span img {
    margin: 0 auto;
    text-align: center; }
span.align-right {
  display: block;
  overflow: hidden;
  clear: both; }
  span.align-right > span {
    display: block;
    overflow: hidden;
    margin: 13px 0 0;
    text-align: right; }
  span.align-right span img {
    margin: 0;
    text-align: right; }
span.float-left {
  display: block;
  margin-right: 13px;
  overflow: hidden;
  float: left; }
  span.float-left span {
    margin: 13px 0 0; }
span.float-right {
  display: block;
  margin-left: 13px;
  overflow: hidden;
  float: right; }
  span.float-right > span {
    display: block;
    overflow: hidden;
    margin: 13px auto 0;
    text-align: right; }

code, tt {
  margin: 0 2px;
  padding: 0 5px;
  white-space: nowrap;
  border: 1px solid #eaeaea;
  background-color: #f8f8f8;
  border-radius: 3px; }

pre code {
  margin: 0;
  padding: 0;
  white-space: pre;
  border: none;
  background: transparent; }

.highlight pre {
  background-color: #f8f8f8;
  border: 1px solid #cccccc;
  font-size: 13px;
  line-height: 19px;
  overflow: auto;
  padding: 6px 10px;
  border-radius: 3px; }

pre {
  background-color: #f8f8f8;
  border: 1px solid #cccccc;
  font-size: 13px;
  line-height: 19px;
  overflow: auto;
  padding: 6px 10px;
  border-radius: 3px; }
  pre code, pre tt {
    background-color: transparent;
    border: none; }

sup {
    font-size: 0.83em;
    vertical-align: super;
    line-height: 0;
}
* {
	-webkit-print-color-adjust: exact;
}
@media screen and (min-width: 914px) {
    body {
        width: 854px;
        margin:0 auto;
    }
}
@media print {
	table, pre {
		page-break-inside: avoid;
	}
	pre {
		word-wrap: break-word;
	}
}
</style>
<title>Laravel 快速指南</title>

</head>
<body>
<h1>Laravel 快速指南</h1>

<ul>
<li><a href="#installation">安装</a></li>
<li><a href="#routing">路由</a></li>
<li><a href="#creating-a-view">创建一个视图</a></li>
<li><a href="#creating-a-migration">创建一个迁移</a></li>
<li><a href="#eloquent-orm">Eloquent ORM</a></li>
<li><a href="#displaying-data">显示数据</a></li>
</ul>


<p><a name="installation"></a></p>

<h2>安装</h2>

<p>为了安装 Laravel 框架，可以在终端输入以下命令：</p>

<pre><code>composer create-project laravel/laravel your-project-name
</code></pre>

<p>或者，也可以从 Github 下载 <a href="https://github.com/laravel/laravel/archive/master.zip">代码库</a>。在 <a href="http://getcomposer.org">安装 Composer</a> 之后，在项目文件的主目录下运行 <code>composer install</code> 命令，这个命令将下载和安装框架的依赖文件。</p>

<p>安装框架结束后，请浏览一下项目并熟悉目录结构。<code>app</code> 目录包含 <code>views</code>, <code>controllers</code> 以及 <code>models</code> 等文件夹。应用程序的大多数代码将位于这个目录下。您也许会浏览 <code>app/config</code> 目录，这里包含了应用程序的各配置选项。</p>

<p><a name="routing"></a></p>

<h2>路由</h2>

<p>作为开始，让我们创建第一个路由。在 Laravel 中创建路由最简单的办法是使用闭包函数。打开 <code>app/routes.php</code> 文件，在文件的底部添加以下路由：</p>

<pre><code>Route::get('users', function()
{
    return 'Users!';
});
</code></pre>

<p>现在，如果您在浏览器中输入 <code>/users</code>路由，您将会看 <code>Users!</code> 作为响应显示。很好！您已经创建了第一个路由。</p>

<p>路由也可以绑定到控制器类，比如：</p>

<pre><code>Route::get('users', 'UserController@getIndex');
</code></pre>

<p>这个路由告诉框架对 <code>/users</code> 路由的请求用该调用 <code>UserController</code> 类的 <code>getIndex</code> 函数。更多关于控制器路由的内容请访问 <a href="/docs/controllers">控制器文档</a> 。</p>

<p><a name="creating-a-view"></a></p>

<h2>创建一个视图</h2>

<p>下面，我们将创建一个简单的试图显示用户数据。视图文件存放在 <code>app/views</code> 目录下并且包含应用的 HTML 。我们在这个目录下添加两个视图文件 <code>layout.blade.php</code> 以及 <code>users.blade.php</code>。首先创建 <code>layout.blade.php</code> 文件：</p>

<pre><code>&lt;html&gt;
    &lt;body&gt;
        &lt;h1&gt;Laravel Quickstart&lt;/h1&gt;

        @yield('content')
    &lt;/body&gt;
&lt;/html&gt;
</code></pre>

<p>接着, 创建 <code>users.blade.php</code> 视图:</p>

<pre><code>@extends('layout')

@section('content')
    Users!
@stop
</code></pre>

<p>您可能觉得里面的一些语法很奇怪。那是因为我们在使用 Laravel 的模板系统：Blade。Blade 是非常快的，因为只需要把模板中的一些正则表达式转换为纯PHP。Blade提供了强大的功能比如模板继承，
还有为一些典型的控制结构比如 <code>if</code> 和 <code>for</code> 提供的语法糖。更多信息请浏览 <a href="/docs/templates">Blade 文档</a>。</p>

<p>现在我们已经创建了视图，让我们返回到 <code>/users</code> 路由，让它返回视图文件的内容：</p>

<pre><code>Route::get('users', function()
{
    return View::make('users');
});
</code></pre>

<p>很好！现在我们已经建立了一个简单的从布局扩展的视图，下面，我们将开始使用数据库。</p>

<p><a name="creating-a-migration"></a></p>

<h2>创建一个迁移</h2>

<p>为了创建一张表保存我们的数据，我们将使用 Laravel 的迁移系统。迁移系统允许我们用具有表现力的方式定义数据库的修改，并且很方便的与团队的其他成员共享。</p>

<p>首先，让我们配置数据库的连接。您可以 <code>app/config/database.php</code> 文件中配置所有数据库的连接。默认情况下，Laravel 使用 SQLite，并且 SQLite 数据库保存在 <code>app/database</code> 目录下，如果您愿意，您也可以改变 <code>driver</code> 选项为 <code>mysql</code> 并且在配置文件中设置 <code>mysql</code> 的连接认证参数。</p>

<p>下面，为了创建迁移，我们将使用 <a href="/docs/artisan">Artisan 命令行</a>。切换到项目的根目录，在终端执行下面的命令：</p>

<pre><code>php artisan migrate:make create_users_table
</code></pre>

<p>下面，在 <code>app/database/migrations</code> 目录下找到生成的迁移文件。这个文件包含一个类，类中定义了两个函数：<code>up</code> 以及 <code>down</code>。在 <code>up</code> 方法中对数据库做您想要的改变，在 <code>down</code> 方法中撤消所做的改变。</p>

<p>让我们像下面这样定义一个迁移：</p>

<pre><code>public function up()
{
    Schema::create('users', function($table)
    {
        $table-&gt;increments('id');
        $table-&gt;string('email')-&gt;unique();
        $table-&gt;string('name');
        $table-&gt;timestamps();
    });
}

public function down()
{
    Schema::drop('users');
}
</code></pre>

<p>下面，我们可以在终端使用 <code>migrate</code> 命令执行上面的迁移。在项目的根目录运行以下命令：</p>

<pre><code>php artisan migrate
</code></pre>

<p>如果您想回滚一个迁移，您可以关注 <code>migrate:rollback</code> 命令。现在我们已经有了数据库的表，让我们开始填充一些数据!</p>

<p><a name="eloquent-orm"></a></p>

<h2>Eloquent ORM</h2>

<p>Laravel 拥有一个极好的ORM：Eloquent。如果您以前使用过 Ruby on Rails 框架，您会发现 Eloquent 与它很相似，因为它遵从数据库交互的 ActiveRecord ORM 模式。</p>

<p>首先，让我们顶一个模型，一个 Eloquent 模型可以用来查询一个相关的数据库的表，也可以代表表中的一行。不要担心，很快就会水落石出。模型文件一般保存在 <code>app/models</code> 目录。让我们像下面这样定义一个 <code>User.php</code> 模型：</p>

<pre><code>class User extends Eloquent {}
</code></pre>

<p>注意我们没有必要告诉 Eloquent 使用了哪一张表。Eloquent 有很多预订的惯例，其中之一就是模型名的复数作为模型的数据库中的表名。非常方便！</p>

<p>使用您喜爱的数据库管理员工具在 <code>users</code> 表中插入一些数据，我们将使用 Eloquent 获取这些数据并传递给视图。</p>

<p>现在我们像下面这样修改 <code>/users</code> 路由：</p>

<pre><code>Route::get('users', function()
{
    $users = User::all();

    return View::make('users')-&gt;with('users', $users);
});
</code></pre>

<p>让我们浏览一下这个路由。首先，<code>User</code> 模型的 <code>all</code> 方法将获取 <code>users</code> 表中的所有数据。然后，我们通过 <code>with</code> 函数将这些记录传递给视图。<code>with</code> 方法接受一个名字和一个值，用来向视图中传递可用的数据。</p>

<p>真了不起。下面我们将在视图中显示这些用户。</p>

<p><a name="displaying-data"></a></p>

<h2>显示数据</h2>

<p>现在我们已经在视图中传递了 <code>users</code> 变量。我们可以像这样显示它们：</p>

<pre><code>@extends('layout')

@section('content')
    @foreach($users as $user)
        &lt;p&gt;{{ $user-&gt;name }}&lt;/p&gt;
    @endforeach
@stop
</code></pre>

<p>您可能想知道在哪里可以找到 <code>echo</code> 表达式。当使用 Blade 模板的时候，您可以通过用两个大括号包围数据的方式显示它。现在您能够访问 <code>/users</code> 路由，并且看到用户的名字显示在屏幕上。</p>

<p>这只是一个开端。在这篇指南中，您已经知晓了一些 Laravel 的基础知识，但是还有很多更精彩的内容需要学习，请继续阅读文档，并且更深入地了解 <a href="/docs/eloquent">Eloquent</a> 以及 <a href="/docs/templates">Blade</a>。或者，也许您对 <a href="/docs/queues">队列</a> 和 <a href="/docs/testing">单元测试</a> 更感兴趣，抑或您想通过 <a href="/docs/ioc">IoC 容器</a> 重构，一切都取决于您。</p>
</body>
</html>